ECMAScript 2018 (ES9) জাভাস্ক্রিপ্টের একটি গুরুত্বপূর্ণ আপডেট যা ২০১৮ সালে প্রকাশিত হয়েছিল। ES9 পূর্ববর্তী সংস্করণগুলোর উপর ভিত্তি করে তৈরি এবং এতে বিভিন্ন নতুন ফিচার ও উন্নত বৈশিষ্ট্য যুক্ত করা হয়েছে, যা ডেভেলপারদের জন্য কোড লেখাকে আরও সহজ, কার্যকর এবং শক্তিশালী করে তোলে। এই আপডেটে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং, অবজেক্ট ও অ্যারে ম্যানিপুলেশন, এবং রেগুলার এক্সপ্রেশন (RegEx) উন্নত করার জন্য নতুন বৈশিষ্ট্য যুক্ত করা হয়েছে।
অ্যাসিঙ্ক্রোনাস ইটারেটর ES9 এ পরিচিতি পেয়েছে, যা for-await-of
লুপ ব্যবহার করে অ্যাসিঙ্ক্রোনাস ডেটার উপর ইটারেশন করতে সহায়তা করে। এটি অ্যাসিঙ্ক্রোনাস ডেটার প্রবাহকে আরও সহজ এবং রিডেবল করে তোলে।
async function fetchData(urls) {
for await (const url of urls) {
const response = await fetch(url);
const data = await response.json();
console.log(data);
}
}
const urls = [
'https://api.example.com/data1',
'https://api.example.com/data2',
'https://api.example.com/data3'
];
fetchData(urls);
ব্যাখ্যা: এখানে, for-await-of
লুপ ব্যবহার করে অ্যাসিঙ্ক্রোনাসভাবে URLs থেকে ডেটা ফেচ করা হচ্ছে এবং প্রতিটি ডেটা লজ করা হচ্ছে।
ES9 এ অবজেক্টের জন্য রেস্ট এবং স্প্রেড প্রপার্টি সমর্থন করা হয়েছে, যা অবজেক্ট ম্যানিপুলেশনকে আরও সহজ করে তোলে।
const person = {
name: 'Alice',
age: 25,
city: 'Dhaka'
};
// রেস্ট প্রপার্টি
const { name, ...details } = person;
console.log(name); // আউটপুট: Alice
console.log(details); // আউটপুট: { age: 25, city: 'Dhaka' }
// স্প্রেড প্রপার্টি
const updatedPerson = { ...person, age: 26 };
console.log(updatedPerson); // আউটপুট: { name: 'Alice', age: 26, city: 'Dhaka' }
ব্যাখ্যা: রেস্ট প্রপার্টি ব্যবহার করে অবজেক্ট থেকে নির্দিষ্ট প্রপার্টি আলাদা করা হয়েছে এবং স্প্রেড প্রপার্টি ব্যবহার করে অবজেক্টে নতুন প্রপার্টি যোগ করা হয়েছে।
romise.prototype.finally()
finally()
মেথডটি প্রমিসের শেষে কিছু কোড চালানোর জন্য ব্যবহৃত হয়, যা প্রমিস সফল বা ব্যর্থ হোক না কেন এক্সিকিউট হয়। এটি কোডের রিডেবিলিটি এবং মেইনটেনেবিলিটি বাড়ায়।
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
// resolve("Data fetched successfully!");
reject("Error fetching data!");
}, 2000);
});
}
fetchData()
.then(data => console.log(data))
.catch(error => console.error(error))
.finally(() => console.log("Operation completed."));
/*
আউটপুট:
Error fetching data!
Operation completed.
*/
ব্যাখ্যা: finally()
ব্লকটি প্রমিসের শেষে নির্বিশেষে এক্সিকিউট হয়, তাই এটি রিসোর্স ক্লিনআপ বা অন্যান্য ক্রিয়াকলাপের জন্য ব্যবহার করা যায়।
ES9 এ রেগুলার এক্সপ্রেশন নিয়ে কিছু উন্নতি করা হয়েছে, যা প্যাটার্ন ম্যাচিংকে আরও শক্তিশালী করে তোলে।
লুকবিহাইন্ড অ্যাসারশনস রেগুলার এক্সপ্রেশনে পূর্ববর্তী প্যাটার্নের উপর ভিত্তি করে ম্যাচিং করতে সহায়তা করে।
const regex = /(?<=\$)\d+/;
const price = "$100";
const result = price.match(regex);
console.log(result[0]); // আউটপুট: 100
ব্যাখ্যা: এখানে, (?<=\$)
অংশটি $
চিহ্নের পরে সংখ্যাগুলো খুঁজে বের করে।
নেমড ক্যাপচার গ্রুপস ক্যাপচার গ্রুপগুলির জন্য নাম নির্ধারণ করতে দেয়, যা কোডে রিডেবিলিটি বৃদ্ধি করে।
const regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const date = "2024-12-16";
const result = date.match(regex);
console.log(result.groups.year); // আউটপুট: 2024
console.log(result.groups.month); // আউটপুট: 12
console.log(result.groups.day); // আউটপুট: 16
ব্যাখ্যা: এখানে, year
, month
, এবং day
নামে ক্যাপচার গ্রুপ নির্ধারণ করা হয়েছে।
ডটঅল ফ্ল্যাগ s
ব্যবহার করে রেগুলার এক্সপ্রেশনকে নতুন লাইন চরিত্রগুলির সাথে মিলতে দেয়।
const regex = /hello.world/s;
const text = "hello\nworld";
console.log(regex.test(text)); // আউটপুট: true
ব্যাখ্যা: s
ফ্ল্যাগ ব্যবহার করে, ডট (.
) নতুন লাইন চরিত্রেও ম্যাচ করে।
ইউনিকোড প্রপার্টি এস্কেপস ইউনিকোড ক্যারেক্টারের বৈশিষ্ট্য অনুযায়ী ম্যাচিং করতে দেয়।
const regex = /\p{Emoji}/u;
const text = "😊";
console.log(regex.test(text)); // আউটপুট: true
ব্যাখ্যা: \p{Emoji}
ইউনিকোড প্রপার্টি ব্যবহার করে ইমোজি ক্যারেক্টার চিহ্নিত করা হয়েছে।
ES9 এ ফাংশনের প্যারামিটার লিস্ট এবং কলগুলিতে ট্রেইলিং কমা ব্যবহার করার সুবিধা যুক্ত করা হয়েছে, যা কোডের সংস্করণ নিয়ন্ত্রণকে সহজ করে তোলে।
function greet(
name,
age,
) {
console.log(`Hello, ${name}. You are ${age} years old.`);
}
greet("Alice", 25,);
/*
আউটপুট:
Hello, Alice. You are 25 years old.
*/
ব্যাখ্যা: ট্রেইলিং কমা ব্যবহার করলে প্যারামিটার যুক্ত বা বাদ দেওয়া সহজ হয় এবং ডিফারেন্স রেগুলার এক্সপ্রেশন এড়ানো যায়।
bject.getOwnPropertyDescriptors()
Object.getOwnPropertyDescriptors()
মেথডটি একটি অবজেক্টের সকল প্রপার্টির ডেটা প্রোপার্টি ডেসক্রিপটরস (যেমন writable
, enumerable
, configurable
) রিটার্ন করে।
const person = {
name: "Alice",
age: 25
};
const descriptors = Object.getOwnPropertyDescriptors(person);
console.log(descriptors);
/*
আউটপুট:
{
name: { value: 'Alice', writable: true, enumerable: true, configurable: true },
age: { value: 25, writable: true, enumerable: true, configurable: true }
}
*/
ব্যাখ্যা: এই মেথডটি অবজেক্টের প্রপার্টিগুলোর গুণাবলী সম্পর্কে বিস্তারিত তথ্য প্রদান করে, যা অবজেক্ট ম্যানিপুলেশনে সহায়ক।
for-await-of
এবং async/await
এর মাধ্যমে অ্যাসিঙ্ক্রোনাস কোড লেখা সহজ এবং রিডেবল হয়।Object.entries()
, Object.values()
, Object.fromEntries()
, এবং Object.getOwnPropertyDescriptors()
মেথডগুলো অবজেক্ট ম্যানিপুলেশনকে আরও কার্যকরী করে তোলে।padStart()
এবং padEnd()
মেথডগুলো স্ট্রিংয়ের শুরু বা শেষে নির্দিষ্ট সংখ্যক ক্যারেক্টার যোগ করা সহজ করে।ECMAScript 2018 (ES9) জাভাস্ক্রিপ্টের ভাষাকে আরও শক্তিশালী এবং কার্যকর করে তোলে। অ্যাসিঙ্ক্রোনাস ইটারেটর, অবজেক্ট রেস্ট/স্প্রেড প্রপার্টি, প্রমিসের finally()
, এবং রেগুলার এক্সপ্রেশন উন্নতির মতো ফিচারগুলো ডেভেলপারদের কোড লেখাকে আরও সহজ, সংক্ষিপ্ত এবং রিডেবল করে তোলে। এছাড়াও, স্ট্রিং ম্যানিপুলেশন এবং অবজেক্ট ম্যানিপুলেশনের নতুন মেথডগুলো ডেটা হ্যান্ডলিংকে আরও কার্যকরী করে তোলে।
এই নতুন বৈশিষ্ট্যগুলো শেখা এবং ব্যবহার করা ডেভেলপারদের কোডের গুণগত মান এবং কার্যকারিতা বৃদ্ধি করতে সহায়ক, যা বড় এবং জটিল প্রজেক্টগুলির ক্ষেত্রে বিশেষভাবে উপকারী।
for-await-of
এবং async/await
ব্যবহার করে অ্যাসিঙ্ক্রোনাস ফাংশনগুলো লিখে দেখুন এবং তাদের কার্যকারিতা বুঝুন।Object.entries()
, Object.values()
, Object.fromEntries()
, এবং Object.getOwnPropertyDescriptors()
মেথডগুলো ব্যবহার করে অবজেক্ট ম্যানিপুলেশন অনুশীলন করুন।padStart()
এবং padEnd()
মেথডগুলো ব্যবহার করে বিভিন্ন উদাহরণ তৈরি করুন।ES9 এর নতুন বৈশিষ্ট্যগুলোকে ভালোভাবে বুঝে এবং প্রয়োগ করে আপনি আপনার জাভাস্ক্রিপ্ট প্রোগ্রামিং দক্ষতাকে আরও উন্নত এবং কার্যকরী করতে পারবেন, যা আপনার কোডকে আরও নির্ভরযোগ্য এবং শক্তিশালী করে তুলবে।
Read more